a11y: Simplify GtkColorSwatchAccessible
authorEmmanuele Bassi <ebassi@gnome.org>
Thu, 28 May 2020 14:09:02 +0000 (15:09 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Fri, 5 Jun 2020 19:35:10 +0000 (20:35 +0100)
Drop the GtkWidgetAccessible.notify_gtk override.

gtk/a11y/gtkcolorswatchaccessible.c

index 5e60d2040ec4b916eeb873811d84ba5054c9a422..1c52fda18c86ac6bd2f81aa51012258b67780fa4 100644 (file)
 
 #include "config.h"
 
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include "gtkcolorswatchprivate.h"
 #include "gtkcolorswatchaccessibleprivate.h"
+#include "gtkcolorswatchprivate.h"
+
+#include <glib/gi18n-lib.h>
 
 static void atk_action_interface_init (AtkActionIface *iface);
 
@@ -29,9 +29,9 @@ G_DEFINE_TYPE_WITH_CODE (GtkColorSwatchAccessible, _gtk_color_swatch_accessible,
 
 static void
 state_changed_cb (GtkWidget     *widget,
-                  GtkStateFlags  previous_flags)
+                  GtkStateFlags  previous_flags,
+                  AtkObject     *accessible)
 {
-  AtkObject *accessible;
   GtkStateFlags flags;
   gboolean was_selected;
   gboolean selected;
@@ -41,23 +41,46 @@ state_changed_cb (GtkWidget     *widget,
   was_selected = (previous_flags & GTK_STATE_FLAG_SELECTED) != 0;
   selected = (flags & GTK_STATE_FLAG_SELECTED) != 0;
 
-  accessible = gtk_widget_get_accessible (widget);
   if (selected && !was_selected)
     atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, TRUE);
   else if (!selected && was_selected)
     atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, FALSE);
 }
 
+static void
+on_selectable_changed_cb (GObject    *gobject,
+                          GParamSpec *pspec,
+                          AtkObject  *accessible)
+{
+  GtkColorSwatch *swatch = GTK_COLOR_SWATCH (gobject);
+  AtkRole role;
+
+  if (gtk_color_swatch_get_selectable (swatch))
+    role = ATK_ROLE_RADIO_BUTTON;
+  else
+    role = ATK_ROLE_PUSH_BUTTON;
+
+  atk_object_set_role (accessible, role);
+}
+
 static void
 gtk_color_swatch_accessible_initialize (AtkObject *obj,
                                         gpointer   data)
 {
+  GtkColorSwatch *swatch = data;
+
   ATK_OBJECT_CLASS (_gtk_color_swatch_accessible_parent_class)->initialize (obj, data);
 
   g_signal_connect (data, "state-flags-changed",
-                    G_CALLBACK (state_changed_cb), NULL);
-
-  atk_object_set_role (obj, ATK_ROLE_RADIO_BUTTON);
+                    G_CALLBACK (state_changed_cb),
+                    obj);
+  g_signal_connect (data, "notify::selectable",
+                    G_CALLBACK (on_selectable_changed_cb),
+                    obj);
+
+  obj->role = gtk_color_swatch_get_selectable (swatch)
+            ? ATK_ROLE_RADIO_BUTTON
+            : ATK_ROLE_PUSH_BUTTON;
 }
 
 static AtkStateSet *
@@ -78,39 +101,19 @@ gtk_color_swatch_accessible_ref_state_set (AtkObject *accessible)
   return state_set;
 }
 
-static void
-gtk_color_swatch_accessible_notify_gtk (GObject    *obj,
-                                        GParamSpec *pspec)
-{
-  GtkWidget *widget = GTK_WIDGET (obj);
-  AtkObject *atk_obj = gtk_widget_get_accessible (widget);
-
-  if (strcmp (pspec->name, "selectable") == 0)
-    {
-      if (gtk_color_swatch_get_selectable (GTK_COLOR_SWATCH (widget)))
-        atk_object_set_role (atk_obj, ATK_ROLE_RADIO_BUTTON);
-      else
-        atk_object_set_role (atk_obj, ATK_ROLE_PUSH_BUTTON);
-    }
-  else
-    GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_color_swatch_accessible_parent_class)->notify_gtk (obj, pspec);
-}
-
 static void
 _gtk_color_swatch_accessible_class_init (GtkColorSwatchAccessibleClass *klass)
 {
   AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
-  GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass *)klass;
 
   atk_class->initialize = gtk_color_swatch_accessible_initialize;
   atk_class->ref_state_set = gtk_color_swatch_accessible_ref_state_set;
-
-  widget_class->notify_gtk = gtk_color_swatch_accessible_notify_gtk;
 }
 
 static void
-_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *scale)
+_gtk_color_swatch_accessible_init (GtkColorSwatchAccessible *self)
 {
+  ATK_OBJECT (self)->role = ATK_ROLE_RADIO_BUTTON;
 }
 
 static gint